home *** CD-ROM | disk | FTP | other *** search
/ BBS in a Box 11 / AMUG BBS in a Box Volume XI (April 1994) (MacWizards).iso / Files / Prog / N-P / OOP for C.sit / OIC.ƒ / class.c < prev    next >
Encoding:
C/C++ Source or Header  |  1988-12-09  |  1.6 KB  |  97 lines  |  [TEXT/KAHL]

  1. /*
  2.  *        Class - the class class; the default meta-class.
  3.  *
  4.  *            Copyright © John Wainwright 1988
  5.  *
  6.  *    Supers : None.
  7.  *
  8.  *    Class Vars : None
  9.  *
  10.  *    Class Methods : None
  11.  *
  12.  *    Methods :
  13.  *
  14.  *        print            - prints the class name
  15.  *        supers            - list of all the supers for this class.
  16.  *        subs            - list of all the sub-classes for this class.
  17.  */
  18.  
  19. #include "oic.h"
  20. #include "generics.h"
  21.  
  22. class     Class;                        /* Class class                         */
  23. class    classes;                    /* list of all classes                */
  24.  
  25. /* -------------------- Class Instance methods ---------------------------- */
  26.  
  27. static list
  28. get_supers(list, class)
  29.     list    list;
  30.     class    class;
  31. {
  32.     register classlist *cl;
  33.  
  34.     for (cl = class->c_superclasses; cl != END; cl = cl->cl_next)
  35.     {
  36.         if (class != cl->cl_class)
  37.             push(list, cl->cl_class);
  38.         get_supers(list, cl->cl_class);
  39.     }
  40.             
  41.     return list;
  42. }
  43.         
  44. static object
  45. _supers(self)
  46.     register class    self;
  47. {
  48.     return get_supers(New(List, END), self);
  49. }
  50.  
  51. static object
  52. _subs(self)
  53.     class    self;
  54. {
  55.     register object        list;
  56.     register class        o;
  57.  
  58.     list = New(List, END);
  59.     for (o = classes; o != END; o = o->c_next)
  60.         if (o != self && IsAKindOf(&self, o))
  61.             push(list, o);
  62.         
  63.     return list;
  64. }
  65.  
  66. static
  67. _print(self)
  68.     class    self;
  69. {
  70.     printf("%s\n", self->c_name);
  71. }
  72.  
  73. static object
  74. _repList(self)
  75.     class    self;
  76. {
  77.     return New(String, self->c_name);
  78. }
  79.  
  80. /* ------------------- Init the Class class ------------------------------- */
  81.  
  82. /*        
  83.  *        note that Class has already been made - the ONLY function
  84.  *        that should call this function is _InitRootClasses in obj.c
  85.  */
  86.  
  87. _InitClass()
  88. {
  89.     AddMethods(Class,
  90.                     supersGeneric,         _supers,
  91.                     subsGeneric,        _subs,
  92.                     printGeneric,        _print,
  93.                     repListGeneric,        _repList,
  94.                     END);
  95. }
  96.  
  97.